このページは私用WordPressの覚え書き兼、テストページです。
「SNSボタン」は、テスト検証用に仮設置しているだけなので、押しても反応しません。

018_1・・・もし~なら「if構文」「条件分岐」


(※条件分岐、覚書メモ)


wordpressでは、if構文条件分岐タグは、頻繁に使うので、まとめておきます。

どこに書くかの決まりはなく、使いたい php ファイルに書きます。
例えば「投稿ページと固定ページではヘッダー画像を変えたい」という場合であれば、ヘッダー画像を出力させている header.php でしょうし、
「新着リストの中でカテゴリー毎に何かの表示を変えたい」という事であれば、その新着リストを出力している固定ページだったり、或いはトップページだったりするでしょう。


条件分岐の基本

<?php if (条件) : ?>
 条件にあてはまる場合の処理
<?php else: ?>
 それ以外の場合の処理
<?php endif; ?>



(例):モバイルとPCで別の文章を表示したい

<?php if ( wp_is_mobile() ) : ?>
 モバイルから閲覧の場合の処理
<?php else: ?>
 それ以外=PCからの閲覧の場合の処理
<?php endif; ?>

wp_is_mobile() とは、wordpress にあらかじめ用意されているタグです。
「モバイル(スマホ・タブレット)から閲覧されているかどうか」という判定をします。
但し wp_is_mobile() のタグでは正確な分岐にはならない、もっと細かく各モバイル毎に設定をした方がいい、という意見もあります。
wp_is_mobile() を使うかどうかについては、また別の記事でまとめたいと思います。
 → ■004_2 wp_is_mobile タグを使うか否か


else: は省略できる

<?php if ( 条件 ) : ?>
  条件にあてはまるものをココに書く
<?php endif; ?>
「それ以外の場合=何もしない」 ということであれば、
このように else: を省略してしまってもOKです。


elseif: で細かな条件分岐ができる

<?php if ( is_single() ) : ?>
 もし「個別記事」なら、△△△する
<?php elseif ( is_page() ) : ?>
 もし「固定ページ」なら、×××する
<?php else: ?>
 それ以外なら、○○○する
<?php endif; ?>
条件分岐を複数にした時は、elseif: を使います。
elseif:何回繰り返してもよく、条件をいくつでも増やすことができます。



もし「○○でない場合」という書き方

<?php if ( !is_single() ) : ?>
 個別ページでなかったら、の場合の処理をココに書く
<?php endif; ?>
条件の前に ! をつけると、否定形=「○○でない場合」になります。


複数の条件に当てはまる時(AND)

<?php if ( wp_is_mobile() && is_single() ) : ?>
  「モバイル」かつ「記事ページ」の場合の処理をココに書く
<?php endif; ?>
AND○○であり尚且つ△△でもある、という場合は、&& で、複数を繋げることができます。

いずれかの条件にしか当てはまらない時(OR)

<?php if ( wp_is_mobile() || is_single() ) : ?>
  「モバイル」あるいは「記事ページ」の場合の処理をココに書く
<?php endif; ?>
OR○○または△△、と、どれかにあてはまる場合、としたい時には、|| で、複数を繋げます。


スペルミスはエラーになる。
コロン括弧を書き間違えたり、書き忘れたりしないようにしましょう。
下記は特に間違えやすいので、注意しましょう。

ifとelseifの後には、コロン[:]
if(): と elseif(): というように書きます。 ; と書くとエラーになります。

endifの後には、セミコロン[;]
endif; と書きます。 : ではありません。

() や <> の数は合っているか
括弧は、ちゃんと閉じないとエラーになります。

全角文字(かなモード)で記号を入力しない
コロン[:]、セミコロン[;]、括弧や&&の記号、スペースなど、すべて欧文英数字(ローマ字モード)で入力すること。
日本語=全角文字(かなモード)は使わない。
意識せずに「全角スペース」を使ってしまっている方も多いです。これもダメです。

「何故かstyle.css が効かない!」という場合、ファイル中に「全角スペース」がないか、再確認してください。 「全角スペース」が含まれていると css は効かないです。




コメントを活用しよう

<?php if(条件): //◯◯のとき ?>
  ◯◯の条件の場合の処理をここに書く
<?php else: //◯◯でないとき?>
  それ以外の場合の処理をここに書く
<?php endif; //◯◯の条件分岐終了 ?>
// を書くと、続く一文はコメントになります。

複数行のコメントは、また別の書き方があります。
phpの外、htmlのコメントの書き方も、また別でちょっと違います。




if構文(例:)トップページだけ

<?php if ( is_home() || is_front_page() ) : ?>
 もし home.php または front.php なら の処理をここに書く
<?php else: ?>
 それ以外の場合の処理をここに書く
<?php endif; ?>
is_front_page() も書くことで、固定ページをホームに固定したときにも認識してくれるようになります。


if構文(例:)ホームの1ページ目だけ

<?php if( ( is_home() || is_front_page() ) && !is_paged() ) : ?>
	ホームの1ページ目のみに表示させたい処理をココに書く
<?php endif; ?>
さきほどの条件分岐だと、ホームの2ページ目(次の記事一覧)以降でも表示されます。
こちらの条件分岐であれば「ホームかつ1ページ目のとき」にのみ表示させることができます。


if構文(例:)個別記事ページだけ

<?php if ( is_single() ) : ?>
	「個別記事」ページでのみ表示する処理をココに書く
<?php else: ?>
	それ以外の処理をここに書く
<?php endif; ?>



if構文(例:)固定ページだけ

<?php if ( is_page() ) : ?>
	「固定ページ」でのみ表示する処理をココに書く
<?php else: ?>
	それ以外の処理をここに書く
<?php endif; ?>



if構文(例:)投稿ページもしくは固定ページだけ

<?php if ( is_singular() ) : ?>
	「投稿ページ」もしくは「固定ページ」で表示する処理をココに書く
<?php else: ?>
	それ以外の処理をここに書く
<?php endif; ?>



if構文(例:)特定の記事ページだけ

<?php if ( is_single('投稿ID') ) : ?>
	指定した記事でのみ表示する処理をココに書く
<?php else: ?>
	それ以外の処理をここに書く
<?php endif; ?>
「この記事のときだけは表示するものを変えたい」「この記事のときだけ表示したい」というときに使います。
'投稿ID'は、記事をプレビューしたりした時に、記事のURLを見ると、
	~/wp018.html?preview_id=255
	
などと表示されるので、それで知ることができます。



if構文(例:)特定の記事ページだけ(複数あるとき)

<?php if ( is_single( array('投稿ID','投稿ID','投稿ID') ) ) : ?>
	指定した記事でのみ表示する処理をココに書く
<?php else: ?>
	それ以外の処理をここに書く
<?php endif; ?>
例えば、<?php if( is_single( array('5','15','100') ) ): ?> とすると
「投稿IDが5、15、100のページ」と「それ以外のページ」で表示が切り替えられるようになります。
, の数を増やせば、いくつでもまとめて指定することができます。


if構文(例:)特定の固定ページだけ

<?php if ( is_page('ページID') ) : ?>
	指定した固定ページでのみ表示する処理をココに書く
<?php else: ?>
	それ以外の処理をここに書く
<?php endif; ?>
固定ページIDも同じく、編集画面のURLで調べられます。


if構文(例:)特定の固定ページだけ(複数)

<?php if ( is_page( array('ページID','ページID','ページID') ) ) : ?>
	指定した固定ページでのみ表示する処理をココに書く
<?php else: ?>
	それ以外の処理をここに書く
<?php endif; ?>
例えば <?php if( is_page( array('1','5') ) ): ?> というように書きます。
また、数字を入れるとIDですが、数字の他に、スラッグ名タイトルも入れることができます。
   ↓
<?php if ( is_page( array( 17, 'beef-stew', 'Irish Stew' ) ) ) : ?>
ID17投稿スラッグが "beef-stew"、またはタイトルが "Irish Stew" のいずれかにあてはまる投稿が表示されている場合
となります。
数字=投稿IDの場合だけ、' ' を省略することができます。スラッグやタイトルの ' ' は、省略できません

参照■WordPress Codex日本語版「条件分岐タグ」


017「...続きを読む」「抜粋の文字数を制限する」


wordpressには、「本文記事」の他に、「抜粋」という機能があります。


「抜粋」とは

何かというと、目次一覧などを作った時に、記事の一部の文章を表示して、以下 [...続きを読む] のような場合に表示することが出来る文字列の機能です。


「抜粋」を使えるようにするには?

管理画面右上部の 表示オプション → 抜粋 にチェックを入れると、「抜粋」を入力する枠があらわれます。
ここに「記事の概略」や「あらすじ」、あるいは、目立たせたい「アピールポイント」などを入れると、=「抜粋」となります。


google検索結果では「抜粋」の内容が有効?

googleで検索した時に検索結果に短い文章がつく際に、"「抜粋」に入れた文字が優先的に表示されるので、「抜粋」を有効に使う事は意味がある" というような話を昔、聞いたことがあります。
ただ googleの仕様は、随時変化していくと思いますので、何とも言えませんが。


「抜粋」を出力させるには?

入力した「抜粋」を出力させるには、任意のテンプレートファイルに下記を記述します。
4行目
excerpt=抜粋です)

<div class="post">
<h2><a href="<?php the_permalink(); ?>" title="「<?php the_title(); ?>」へ"></h2>
<?php the_post_thumbnail( array(100,100) ); ?></a><br />
<?php the_excerpt(); //抜粋?>
</div>


「抜粋」を毎回入力するのがメンドウな時は?

でも毎日ブログを書くのに、本文以外に、いちいち「抜粋」にも入力、っていうのも、案外面倒ですよね。
抜粋に何も入力しなかった場合どうなるのか というと、
excerptの出力結果=自動的に、本文記事が使われます。


「抜粋」の文字数っていくつ?

この「抜粋」の文字数が何文字かというと、デフォ設定で、確か110文字(?)(だったかな?)のようで、
ちょっと長い・・・ もうちょっと短いのがいいかも・・・ って方も多いかと思います。


抜粋の文字数をカスタマイズ(もっと短くしよう)

文字数をに変更するには、functions.php に、下記を記述します。

<?php
//抜粋の文字数を30文字にする
function new_excerpt_mblength($length) {
     return 30;
}
add_filter('excerpt_mblength', 'new_excerpt_mblength');
?>
  ↑
4行目の数字が文字数です。(上記例では30文字としました)


抜粋に ...続きを読む と入れる

それから、「抜粋」のデフォルト表現なんですが、抜粋文字の末尾に [...] とつくだけなので、少々不親切かな・・・と思う場合は、変えることもできます。
もうちょっとわかりやすく、 [...続きを読む] のように変えたいと思います。


↓ functions.php に、下記を追記します。

<?php
//抜粋に...続きを読むと入れる
function new_excerpt_more($post) {
    return '<a href="'. get_permalink($post->ID) . '">' . '...続きを読む' . '</a>';   
}   
add_filter('excerpt_more', 'new_excerpt_more');
?>

これで完了です。


016無駄な空白の横スクロールバーを消す方法


自分が作ったオリジナルのテンプレートに、ずっと横スクロールバーが発生してるのがすごい気になっていました。
だったら直せよ と思うものの放置。
横スクロールバーを消す方法がわかったので、書いておきます。


邪魔な [横スクロールバー] を消すには

style.css を開いて、body のとこに以下(2行目)を追記。

body	{
overflow-x:hidden; /* 横スクロールバーを消す */
}


こんだけでした……onz


0015 single.php に同一カテゴリ内の前後ナビゲーションをつける


個別記事のページ=single.php に「前の記事へ」「次の記事へ」のページリンクをつけているのですが、
全記事対象ではなく同一カテゴリーのみの記事にだけ飛ぶようにする方法です。


同一カテゴリーのみの記事にだけ飛ぶページリンク

<div class="alignleft"><?php previous_post_link('&laquo; %link', '%title', TRUE, ''); ?></div>
<div class="alignright"><?php next_post_link('%link &raquo;', '%title', TRUE, ''); ?></div>

このように、TRUE をつければカテゴリーのみ対象になるとのことです。


全記事対象にしたい場合は

<div class="alignleft"><?php previous_post_link('&laquo; %link') ?></div>
<div class="alignright"><?php next_post_link('%link &raquo;') ?></div>


●参考サイト「WordPressで同一カテゴリ内の前後ナビゲーション」


014_2カスタム投稿の「カテゴリー」と「タグ」を表示するようにする


「カスタム投稿」を作るにプラス、覚書メモ


「通常投稿」には、「カテゴリー」と「タグ」の仕様が標準についてますが、
自作で「カスタム投稿」を作った場合は、自分で定義を追加しないと「カテゴリー」も「タグ」も使えるようにはなっていないです。

いちいち設定しないと「存在しない」というのはなにかと不便ですが、これも wordpress の仕組みを理解する上でも大事なことかな、と思って設定したいと思います。


「カテゴリー」「タグ」も、実は「タクソノミー」

調べてみると、
どうやら「カテゴリー」と「タグ」は、両方とも同じ「タクソノミー(訳すと=分類)」という言葉で定義するようです。

設定では 'hierarchical' という部分を true にするか、false にするか、の違いだけのようです。

trueだと=カテゴリー になり、
false だと=タグ になります。


「カスタム投稿」に「カテゴリー」と「タグ」を設定する

functions.php に下記を追記します

もちろん、「カスタム投稿」を複数作った場合は、それぞれに設定が必要です。
下記↓はひとつ分です。(一例として「イラスト」のカスタム投稿)

    //カテゴリータイプ
    $args = array(
        'label' => 'カテゴリー',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => true
    );
    register_taxonomy('illust_category','illust',$args);
     //タグタイプ
    $args = array(
        'label' => 'タグ',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => false
    );
    register_taxonomy('illust_tag','illust',$args);


実際に追記したのが下記です。(functions.php に追記する)

(26行目~41行目)
   ↓

<?php
//カスタム投稿生成
add_action('init', 'my_custom_post_type'); //WordPressの読み込みが完了し、ヘッダーが送信される前にmy_custom_post_typeをフック
function my_custom_post_type() {

    $labels = array(
        'name' => 'イラスト', //投稿タイプの一般名
        'add_new_item' => '新規イラストを追加',
        'not_found' =>  __('イラストは見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト
        'new_item' => __('新しいイラスト'), //編集画面のタイトル
        'view_item' => __('イラストを表示') //記事編集画面の「プレビュー」のテキスト
    );
    $args = array(
        'labels' => $labels, //この投稿タイプのラベルの配列
        'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数
        'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか
        'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか
        'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか
        'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post"
        'rewrite' => true, //このフォーマットでパーマリンクをリライトする
        'hierarchical' => false, //この投稿タイプが階層(親の指定が許可されている)かどうか
        'menu_position' => 5, //投稿タイプが表示される管理画面のメニューの位置
        'supports' => array('title','editor','thumbnail', 'excerpt','comments','trackbacks') //add_post_type_support()を直接呼び出すエイリアス
    );
    register_post_type('illust',$args); //カスタム投稿タイプとその動作を定義する設定名(single.phpに追加する名前でもある)
    //カテゴリータイプ
    $args = array(
        'label' => 'カテゴリー',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => true
    );
    register_taxonomy('illust_category','illust',$args);
     //タグタイプ
    $args = array(
        'label' => 'タグ',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => false
    );
    register_taxonomy('illust_tag','illust',$args);




    $labels = array(
        'name' => 'comic', //投稿タイプの一般名

//以下略

}
?>

作った「カスタム投稿」の数分だけ追記します。


パーマリンクを空更新

カスタム投稿を作った時と同じく
functions.php に追記して保存した後、メニュー → 設定 → パーマリンクを、空更新しておきました。


記事を投稿してみる

これで、管理画面上で、「カスタム投稿」の「カテゴリー(と表示名をつけたタクソノミー)」と、同じく「タグ(と表示名をつけたタクソノミー)」ができました。
さっそく記事を投稿して、試しにタグを入力してみたいと思います。

入力したものの、プレビューしても出てこない

しかし、タグを入力後、プレビューしてみても、タグが表示されません・・・

これは、テンプレート(single-xxx.php)の中に、「タクソノミーを表示する」というコードを、まだ書いてないからです。


「カスタム投稿」の「カテゴリー」と「タグ」を出力させるには

いろいろぐぐって、試してみた結果、
下記のように書けば、「カテゴリー(タクソノミー)」と「タグ(同じくタクソノミー)」の文字が表示できるようになりました。

1~6行目が「カテゴリー」、7~12行目が「タグ」)
    ↓

<?php
$taxolist = get_the_term_list( $post->ID, 'illust_category', 'カテゴリー:', '、', '' );
if($taxolist):
?>
<dd><?php echo $taxolist; ?></dd>
<?php endif; ?>
<?php
$taxolist2 = get_the_term_list( $post->ID, 'illust_tag', 'タグ:', '、','' );
if($taxolist2):
?>
<dd><?php echo $taxolist2; ?></dd>
<?php endif; ?>


「出力結果」は、

  ↓

カテゴリー:食べ歩き タグ:ラーメン味噌市ヶ谷
のようになります。
(見た目のデザインは、スタイル定義によって変わります)


上記のコードは、出力したい部分例えば:single-llust.phparchive-illust.php など)に記述します。



投稿されたものがありません。